home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / ggraph / RCS / axis.c,v < prev    next >
Text File  |  1989-07-12  |  6KB  |  193 lines

  1. head     1.1;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.1
  10. date     89.07.12.01.40.10;  author douglis;  state Exp;
  11. branches ;
  12. next     ;
  13.  
  14.  
  15. desc
  16. @baseline from monet (?)
  17. @
  18.  
  19.  
  20.  
  21. 1.1
  22. log
  23. @Initial revision
  24. @
  25. text
  26. @#include <stdio.h>
  27. #include <errno.h>
  28. #include <strings.h>
  29. #include <math.h>
  30. #include "ggraph.h"
  31. #include "ggraphdefs.h"
  32.  
  33. /****************************************************************
  34.  *                                *
  35.  *    drawaxis - draw the axis for the graph            *
  36.  *        xlabel - the label for the X axis        *
  37.  *        ylabel - the label for the Y axis        *
  38.  *        axistype - the line type to use            *
  39.  *        xticks - number of ticks on X axis        *
  40.  *        yticks - number of ticks on Y axis        *
  41.  *        dxticks - delta for ticks on X axis        *
  42.  *        dyticks - delta for ticks on Y axis        *
  43.  *        sxtick - starting value for ticks on X axis    *
  44.  *        sytick - starting value for ticks on Y axis    *
  45.  *                                *
  46.  ****************************************************************/
  47. drawaxis()
  48. {
  49.     register int i;
  50.     char    s[20];
  51.  
  52.  /* draw X axis */
  53.     if (xaxisf)
  54.       if(crossxsw)
  55.     drawline (cg.axline_type, cg.xorigin, 
  56.       (0.0 - cg.yoffset)*cg.scaley+cg.yorigin,
  57.        cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex, 
  58.         (0.0 - cg.yoffset)*cg.scaley+cg.yorigin);
  59.       else
  60.     drawline (cg.axline_type, cg.xorigin, cg.yorigin,
  61.         cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex, cg.yorigin);
  62.  /* draw Y axis */
  63.     if (yaxisf)
  64.       if(crossysw)
  65.     drawline (cg.axline_type, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin, 
  66.       cg.yorigin, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin,
  67.           cg.yorigin + cg.numticky * cg.dticky * cg.scaley);
  68.       else
  69.     drawline (cg.axline_type, cg.xorigin, cg.yorigin,
  70.         cg.xorigin, cg.yorigin + cg.numticky * cg.dticky * cg.scaley);
  71.     for (i = cg.firstxsw; i <= cg.numtickx; i++) {/* draw X grid lines */
  72.     /* draw a tick mark */
  73.     if (xtickf)
  74.       if(crossxsw)
  75.         drawline (cg.axline_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  76.             (0.0 - cg.yoffset)*cg.scaley+cg.yorigin, cg.xorigin +
  77.             (i * cg.dtickx * cg.scalex), (0.0 - cg.yoffset)*cg.scaley+cg.yorigin - 4.0);
  78.       else
  79.         drawline (cg.axline_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  80.             cg.yorigin, cg.xorigin +
  81.             (i * cg.dtickx * cg.scalex), cg.yorigin - 4.0);
  82.     /* draw a dotted grid line */
  83.     if (xgridf)
  84.         drawline (cg.xgrid_type, cg.xorigin + (i * cg.dtickx * cg.scalex),
  85.             cg.yorigin, cg.xorigin + (i * cg.dtickx * cg.scalex),
  86.             cg.yorigin + (cg.numticky * cg.dticky * cg.scaley));
  87.     /* write tick label */
  88.     if (xticklf) {
  89.         if (cg.xpreci2 != -1)
  90.           if(cg.logxsw){
  91.         sprintf (s, "%*.*f",  cg.xpreci1, cg.xpreci2,
  92. (pow((double)cg.logxtick, (double)(i+(int)(cg.xoffset)))));
  93. if(debug) printf("xtick %s %f %d %d\n", s, cg.logxtick, i, (int)(cg.xoffset)); 
  94.           }else
  95.         sprintf (s, "%*.*f",cg.xpreci1, cg.xpreci2,
  96.           (i * cg.dtickx) + cg.stickx);
  97.         else
  98.           if(cg.logxsw){
  99.         sprintf (s, "%d", (int)(0.5 + 
  100.           pow((double)cg.logxtick, (double)(i+(int)cg.xoffset))));
  101. if(debug) printf("xtick %s %f %d %d\n", s, cg.logxtick, i, (int)(cg.xoffset)); 
  102.           }else
  103.         sprintf (s, "%d", (int) ((i * cg.dtickx) + cg.stickx));
  104.           if(crossxsw)
  105.         drawctext (cg.xorigin + (i * cg.dtickx * cg.scalex),
  106.             (0.0 - cg.yoffset)*cg.scaley+cg.yorigin - 10.0,
  107.             cg.xtick.t_font, cg.xtick.t_size, s, TOPCENTER_TEXT);
  108.           else
  109.         drawctext (cg.xorigin + (i * cg.dtickx * cg.scalex),
  110.             cg.yorigin - 10.0, cg.xtick.t_font, cg.xtick.t_size,
  111.              s, TOPCENTER_TEXT);
  112.  
  113.     }
  114.     }
  115.     for (i = cg.firstysw; i <= cg.numticky; i++) {/* draw Y grid lines */
  116.     /* draw tick marks */
  117.     if (ytickf)
  118.       if(crossysw)
  119.         drawline (cg.axline_type, (0.0 - cg.xoffset)*cg.scalex+cg.xorigin, cg.yorigin +
  120.             (i * cg.dticky * cg.scaley), (0.0 - cg.xoffset)*cg.scalex+cg.xorigin - 4.0,
  121.             cg.yorigin + (i * cg.dticky * cg.scaley));
  122.     else
  123.         drawline (cg.axline_type, cg.xorigin, cg.yorigin +
  124.             (i * cg.dticky * cg.scaley), cg.xorigin - 4.0,
  125.             cg.yorigin + (i * cg.dticky * cg.scaley));
  126.  
  127.     /* draw grid */
  128.     if (ygridf)
  129.         drawline (cg.ygrid_type, cg.xorigin,
  130.             cg.yorigin + (i * cg.dticky * cg.scaley),
  131.             cg.xorigin + cg.numtickx * cg.dtickx * cg.scalex,
  132.             cg.yorigin + (i * cg.dticky * cg.scaley));
  133.     /* draw tick labels */
  134.     if (yticklf) {
  135.         if (cg.ypreci2 != -1)
  136.           if(cg.logysw){
  137.         sprintf (s, "%*.*f",  cg.ypreci1, cg.ypreci2,
  138. (pow((double)cg.logytick, (double)(i+(int)cg.yoffset))));
  139. if(debug) printf("ytick %s %f %d %d\n", s, cg.logytick, i, (int)(cg.yoffset)); 
  140.           }else
  141.         sprintf (s, "%*.*f", cg.ypreci1, cg.ypreci2,
  142.                   (i * cg.dticky) + cg.sticky);
  143.         else
  144.           if(cg.logysw){
  145.         sprintf (s, "%d", (int)(0.5 + pow((double)cg.logytick,
  146.          (double)(i+(int)cg.yoffset))));
  147. if(debug)printf("ytick %s %f %d %d\n", s, cg.logytick, i, (int)(cg.yoffset));
  148.           }else
  149.         sprintf (s, "%d", (int) ((i * cg.dticky) + cg.sticky));
  150.           if(crossysw)
  151.         drawctext ((0.0 - cg.xoffset)*cg.scalex+cg.xorigin - 8.0,
  152.           cg.yorigin + ((i * cg.dticky * cg.scaley) + 8.0),
  153.             cg.ytick.t_font, cg.ytick.t_size, s, TOPRIGHT_TEXT);
  154.           else
  155.         drawctext (cg.xorigin - 8.0,
  156.             cg.yorigin + ((i * cg.dticky * cg.scaley) + 8.0),
  157.             cg.ytick.t_font, cg.ytick.t_size, s, TOPRIGHT_TEXT);
  158.  
  159.     }
  160.     }
  161.  
  162.  /* draw X label */
  163.     drawctext (cg.xlabel.t_xpos, cg.xlabel.t_ypos, cg.xlabel.t_font,
  164.       cg.xlabel.t_size, cg.xlabel.t_text, TOPCENTER_TEXT);
  165.  /* draw Y label */
  166.     if(!cg.yvert)
  167.       drawctext (cg.ylabel.t_xpos, cg.ylabel.t_ypos,
  168.     cg.ylabel.t_font, cg.ylabel.t_size, cg.ylabel.t_text, TOPCENTER_TEXT);
  169.     else{            /* compute spacing for text */
  170.     drawvtext (cg.ylabel.t_xpos, cg.ylabel.t_ypos, cg.ylabel.t_font, cg.ylabel.t_size,
  171.       cg.ylabel.t_text, ycharsz[cg.ylabel.t_size]);
  172.     }
  173. }
  174.  
  175. /****************************************************************
  176.  *                                *
  177.  *    drawframe - draw a frame around the graph        *
  178.  *                                *
  179.  ****************************************************************/
  180. drawframe()
  181. {
  182.     drawline (cg.gframe.fsize, cg.gframe.frame1x, cg.gframe.frame1y,
  183.       cg.gframe.frame2x, cg.gframe.frame2y);
  184.     drawline (cg.gframe.fsize, cg.gframe.frame2x, cg.gframe.frame2y,
  185.       cg.gframe.frame3x, cg.gframe.frame3y);
  186.     drawline (cg.gframe.fsize, cg.gframe.frame3x, cg.gframe.frame3y,
  187.       cg.gframe.frame4x, cg.gframe.frame4y);
  188.     drawline (cg.gframe.fsize, cg.gframe.frame4x, cg.gframe.frame4y,
  189.       cg.gframe.frame1x, cg.gframe.frame1y);
  190.     return;
  191. }
  192. @
  193.